package com.sisgesbyte.common;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import com.sisgesbyte.web.beanUtil.DatosUsuariosBean;
import com.sisgesbyte.web.beanUtil.UsuarioActivoBean;

public class Validaciones {

	public static List<UsuarioActivoBean> listaUsuarios = new ArrayList<UsuarioActivoBean>();

	public String validarCamposString(Object campo) {

		String valor = "";
		if ((String)campo != "" ){
			if (campo instanceof String) {
				valor = (String) campo;
				if (valor.length() > 0) {
					valor = valor.trim();
				}
				return valor;
			}
		}
		return valor;
	}

	/**
	 * @author jvillanu
	 * @param 
	 * para evitar error al ingresar valores nulos en BD
	 * */
	public String validarCamposStringSubirArchivos(Object campo) {

		String valor = "";
		if (campo instanceof String) {
			System.out.println("Captura Estring : " + campo.toString().trim());
			if(campo.toString().trim().equalsIgnoreCase("-")){
				valor =" ";
			}else{
				valor = (String) campo.toString().trim();
			}
			return valor;
		}
		return valor;
	}

	public Integer validarCampoInteger(Object campo) {
		Integer valor = null;
		if (campo instanceof Integer) {
			return (Integer) campo;
		}
		return valor;
	}

	public void validarUsuarioActivo(DatosUsuariosBean datos) {
		try {
			if (listaUsuarios.size() > 0) {
				boolean active = false;
				for (UsuarioActivoBean ls : listaUsuarios) {
					if (ls.getCodSession().equalsIgnoreCase(datos.getSession())) {
						active = true;
						System.out.println("Usuario ya se encuentra Activo ");
					}
				}
				if (!active) {
					insertarUsuarioActivo(datos);
				}
			} else {
				insertarUsuarioActivo(datos);
			}
		} catch (Exception e) {
			System.out.println("Error al registrar usuario Activo");
		}
	}

	private void insertarUsuarioActivo(DatosUsuariosBean datos) {

		// buscamos que no exista ningun usuario con el mismo nombre de usuario
		// en la lista de activos, si es asi se elimina
		// y se chanca con el nuevo usuario
		try {

			int k = 0;
			for (UsuarioActivoBean us : listaUsuarios) {

				if (us.getUsuarioActivo().equalsIgnoreCase(datos.getUsuario())) {
					listaUsuarios.remove(k);
				}
				++k;
			}

		} catch (Exception e) {
			System.out.println("Error al eliminar sessiones duplicadas");
		}

		try {
			// Procedemos a registrar el usuario
			UsuarioActivoBean user = new UsuarioActivoBean();
			int i = 0;
			if (listaUsuarios.size() > 0) {
				i = listaUsuarios.get(listaUsuarios.size() - 1).getId();
			}
			user.setId(i + 1);
			user.setUsuarioActivo(datos.getUsuario());
			user.setCodSession(datos.getSession());
			user.setFechaIngreso(obtenerFechaIngreso());
			listaUsuarios.add(user);
			System.out.println("Se regitro el Usuario");
		} catch (Exception e) {
			System.out.println("Error al registrar Usuario " + e);
		}
	}

	public String obtenerFechaIngreso() {

		Calendar fecha = new GregorianCalendar();

		int año = fecha.get(Calendar.YEAR);
		int mes = fecha.get(Calendar.MONTH);
		int dia = fecha.get(Calendar.DAY_OF_MONTH);
		int hora = fecha.get(Calendar.HOUR_OF_DAY);
		int minuto = fecha.get(Calendar.MINUTE);
		int segundo = fecha.get(Calendar.SECOND);

		StringBuilder fech = new StringBuilder();
		fech.append(año);
		fech.append("/");
		fech.append(mes + 1);
		fech.append("/");
		fech.append(dia);
		fech.append(" ");
		fech.append(String.format("%02d", hora));
		fech.append(":");
		fech.append(String.format("%02d", minuto));
		fech.append(":");
		fech.append(String.format("%02d", segundo));

		return fech.toString();
	}

	public String transformarDateString(Date dato) {
		String convertido = "";
		if (dato != null) {
			DateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
			convertido = fecha.format(dato);
		}
		return convertido;
	}

	public Date transformarStringDate(String date) {
		Date dato = null;
		SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
		String dateInString = date;

		try {

			dato = formatter.parse(dateInString);

		} catch (Exception e) {
			dato = null;
		}

		return dato;
	}

	/**
	 * @param String
	 *            formato YYYY-mm-dd
	 * */
	public Date transformarStringDate2(String date) {
		Date dateConvert = null;
		SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd");
		String dateInString = "";
		if(date.trim() == "-"){
			dateInString ="0001-01-01";
		}else{
			dateInString = date;
		}
	
		try {

			dateConvert = formatter.parse(dateInString);

		} catch (Exception e) {
			dateConvert = null;
		}
		System.out.println(dateConvert);
		return dateConvert;
	}
	
	public Boolean transformarStringBoolean(String active){
		Boolean valor = true;
		if(active.trim().toLowerCase().equalsIgnoreCase("true") ){
			valor = true;
		}else{
			valor = false;
		}
		
		return valor;
	}
}
